/* =============================================================
 * Your Grandmother's guide to Algorithms
 * =============================================================
 *
 * Copyright (c) 2007, Saverio Miroddi
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright 
 *       notice, this list of conditions and the following disclaimer in the 
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the SaverioMiroddiSoftware nor the names of its 
 *       contributors may be used to endorse or promote products derived from 
 *       this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *  
 * ---------------------------
 * Condition.java
 * ---------------------------
 *
 */
package dbobjects;

/**
 * @author Saverio Miroddi
 */
public class Condition {
	public static final int OP_B  = 0; // <
	public static final int OP_BE = 1; // <=
	public static final int OP_EQ = 2; // =
	public static final int OP_GE = 3; // >=
	public static final int OP_G  = 4; // >
	public static final int OP_NE = 5; // != / <>
	
	public int leftPos, rightPos;
	public int operator;
	
	public Condition(int leftPos, int operator, int rightPos) {
		this.leftPos = leftPos;
		assert(OP_B <= operator && operator <= OP_NE);
		this.operator = operator;
		this.rightPos = rightPos;
	}
	
	public boolean isTrue(String[] leftRow, String[] rightRow) {
		if (leftRow == null || rightRow == null) return false;
		
		switch(operator) {
		case OP_B:
			return leftRow[leftPos].compareTo(rightRow[rightPos]) < 0;
		case OP_BE:
			return leftRow[leftPos].compareTo(rightRow[rightPos]) <= 0;
		case OP_EQ:
			return leftRow[leftPos].compareTo(rightRow[rightPos]) == 0;
		case OP_GE:
			return leftRow[leftPos].compareTo(rightRow[rightPos]) >= 0;
		case OP_G:
			return leftRow[leftPos].compareTo(rightRow[rightPos]) > 0;
		case OP_NE:
			return leftRow[leftPos].compareTo(rightRow[rightPos]) != 0;
		default:
			throw new RuntimeException(); // not to happen
		}
	}
}
